<?php
class Validations_addendum {
	
	/**
	 * Variavel de sessão
	 * */
	private $session;
	/**
	 * Instancia do annotation
	 * */
	private $r;
	/**
	 * Mantem informações de session do usuário
	 * */
	private $user_login;
	
	/**
	 * Classe construtora
	 * */
	public function __construct($session, $class, $method) {
		$this->session = $session;
		$this->r = new ReflectionAnnotatedMethod($class, $method);
		$this->user_login = get_user_login($this->session);
	}
	
	/**
	 * Verifica permissões de usuário
	 * */
	public function authorize(){
		$is_authorized = true;
		
		//Verifica se tem o metodo no comentario
		if ($this->r->hasAnnotation('Authorize')){
			if(Auth::is_auth($this->session)){
				$auth = $this->r->getAnnotation('Authorize');
				if (sizeof($auth->value) > 0) {					
					foreach ($auth->value as $perm) {
						if (Auth::has_permission($this->session, $perm)) {
							$is_authorized = true;
							break;
						} else {
							$this->_redirect(site_url(URL_DEFAULT_LOGGED));
							break;
						}
					}
				}
				
			}
			else
				$is_authorized = false;
		}
		
		//Caso não tenha a autorização para continuar é enviado para login
		if(!$is_authorized)
			$this->_redirect(site_url(URL_DEFAULT_LOGIN));
	}
	/**
	 * Verifica se contem linguagem na url e se não tiver retorna padrão
	 * */
	public function language(){
		//Verifica se tem o metodo no comentario
		if ($this->r->hasAnnotation('Language')){
			$retorno = DEFAULT_LANGUAGE;
			
			$segments = get_url_segments();
			if (count($segments) > 0){
				$retorno = cur_lang($segments[1]);
			}
			return $retorno;
		}
	}
	
	//== FOR PROJECT	
	/**
	 * Validação para verificar se time já foi criado
	 * */
	public function create_team() {	
		$is_authorized = true;
		//Verifica se tem o metodo no comentario
		if ($this->r->hasAnnotation('Create_team')){
			if(Auth::is_auth($this->session)){
				
				$this->user_login = get_user_login($this->session);
				
				if($this->r->class == "create_team_controller"){
					//caso não tenha o time criado envia para cria time
					if($this->user_login->user_create_team)
						$this->_redirect(site_url('create-players'));
				}
			}
			else
				$is_authorized = false;
		}
		
		//Caso não tenha a autorização para continuar é enviado para login
		if(!$is_authorized)
			$this->_redirect(site_url(URL_DEFAULT_LOGIN));
	}
	
	/**
	 * Validação para verificar os jogadores ja foram criados
	 * */
	public function create_players() {	
		$is_authorized = true;	
		//Verifica se tem o metodo no comentario
		if ($this->r->hasAnnotation('Create_players')){
			if(Auth::is_auth($this->session)){
				
				$this->user_login = get_user_login($this->session);
				
				//caso não tenha o time criado envia para cria time
				if(!$this->user_login->user_create_team)
					$this->_redirect(site_url('create-team'));
				
				if($this->r->class == "create_players_controller"){
					//Redireciona para profile se tiver cadastrado os times
					if($user_login_vo->user_create_players)
						redirect(site_url('profile'));
				}
			}
			else
				$is_authorized = false;
		}
		
		//Caso não tenha a autorização para continuar é enviado para login
		if(!$is_authorized)
			$this->_redirect(site_url(URL_DEFAULT_LOGIN));
	}
	
	// === PRIVATES ===
	/**
	 * Redireciona para URL
	 * */
	private function _redirect($url){
		redirect($url);
	}
}